//
// gcc -g -I.. -c main.c -o main.o
// gcc -o main.exe main.o -L../example1 -lexample1
// lib /def:example1.def /OUT:example1.lib
// gcc -o main.exe main.o example1/example1.lib
// gcc -I.. -S -masm=intel -m32 -fno-asynchronous-unwind-tables -o main.s main.c
// g++ -I.. -I../VCSample/SIPSample/include -c main.c -o main.o
// g++ -o main.exe main.o -L../VCSample/SIPSample/bin -lPortSIPCore

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

//#include <example1/example1.h>

#include <PortSIPLib/PortSIP_Errors.hxx>
#include <PortSIPLib/PortSIPTypes.hxx>
#include <PortSIPLib/SIPEvent.hxx>
#include <PortSIPLib/PortSIPLib.hxx>
//#include <PortSIPLib/ICallbackParameters.hxx>
//#include <PortSIPLib/AbstractCallbackDispatcher.hxx>

//using namespace PortSIP;

//typedef int (*pfunc1)();
//typedef int (*pfunc2)(int, int);
//typedef int (*pfunc3)(int, int, int);

int initMatrix(int N, int** matrix)
{
	int i,j;
	for (i=0; i<N; i++)
	{
		for(j=0; j<N; j++)
		{
			matrix[i][j] = (i+1)*(j+1);
		}
	}
	return 0;
}

int printMatrix(int N, int** matrix)
{
	int i,j;
	for (i=0; i<N; i++)
	{
		for(j=0; j<N; j++)
		{
			printf("matrix[%d,%d] = %d\n", i, j, matrix[i][j]);
		}	
		puts("---");
	}
	return 0;
}

int printMatrix1(int N, int** matrix)
{
	int i,j;
	for (i=0; i<N; i++)
	{
		for(j=0; j<N; j++)
		{
			printf("%4d ", matrix[i][j]);
		}	
		puts("\n");
	}
	return 0;
}

extern int PortSIP_getNumOfRecordingDevices(void*);

int main(int argc, char** argv)
{
//	PortSIP_initialize(0, TRANSPORT_UDP, PORTSIP_LOG_NONE, "", 8, "PortSIP VoIP SDK 11.2", false, false, 0);
	void * SIPCoreLib = 0;
	PortSIP_getNumOfRecordingDevices(SIPCoreLib);

/*
	int a = 10;
	int b = 20;
	int c = 30;
	int d = 40;
	
	int i = 0;
	int j = 0;
	int k = 0;
	int t = 0;
	
	int N = 10;
	typedef int mytype;
	int** matrix = (int**)malloc(sizeof(int*) * N);
	for (j=0; j<N; j++)
		matrix[j] = (int*)malloc(sizeof(int) * N);
	
	initMatrix(N, matrix);
//	printMatrix(N, matrix);
//	puts("---");
	
//	i = func1();
//	j = func2(a, b);
//	k = func3(a, b, c);
	
//	puts("---");
	
//	printf("matrix   : 0x%x\n", matrix);
	
//	printf("matrix[0]: 0x%x\n", matrix[0]);
//	printf("matrix[1]: 0x%x\n", matrix[1]);
//	printf("matrix[2]: 0x%x\n", matrix[2]);
//	printf("matrix[3]: 0x%x\n", matrix[3]);
//	printf("matrix[4]: 0x%x\n", matrix[4]);

	//printf("matrix[0,0]: %d\n", matrix[0][0]);
//	puts("---");

	t = func4(N, matrix);
	
//	printMatrix(N, matrix);
//	puts("---");
	printMatrix1(N, matrix);
	
//	printf("matrix: 0x%x\nresult: 0x%x\n", matrix, t);
	
//	printf("%d %d %d %x\n", i, j, k, t);
/*
	for (i=0; i<N; i++)
	{
		for (j=0; j<N; j++)
			printf("matrix[%d,%d] = %d\n", i,j, matrix[i,j]);
		puts("");
	}
*/

/*
	HMODULE mhInst = LoadLibrary("example1/example1.dll"); 
	
	if (!mhInst)
	{
		puts("Error");
	}
	else
	{
		pfunc1 func1;
		func1 = (pfunc1)GetProcAddress(mhInst, "func1");
		
		if (func1) 
		{
			puts("Function OK");
			int i = func1();
			printf("%d\n", i);
		}
		else
		{
			puts("error");
		}

	}
	
	FreeLibrary(mhInst);	
*/	
	return 0;
}